package cn.ywang.lazy;

/**
 * 懒汉式--使用内部类
 * 特点： 只有在外部类被调用时才会加载内部类
 * 内部类是在外部类加载之前被初始化，避免了线程安全问题
 * 这种模式兼顾了饿汉式的内存浪费，也兼顾了synchronized，完美的屏蔽了这两个缺点
 *
 * @Auther: BeatificWang
 * @Date: 2018/9/23 17:58
 */
public class LazyThree {
	// 初始化标识，必须为static，否则利用反射通过对象修改initialized，那么单例模式就失效了
	//	private static boolean initialized = false;

	private LazyThree() {
		//		synchronized (LazyThree.class) {
		//			if (initialized) {
		//				throw new RuntimeException("不能重复创建单例");
		//			}
		//			initialized = true;
		//		}
	}

	// static表示该方法是类方法，使单例得空间可被共享
	// final表示该方法不允许覆盖
	public static final LazyThree getInstance() {
		return LazyHolder.lazy;
	}

	private static class LazyHolder {
		private static final LazyThree lazy = new LazyThree();
	}
}
